package cn.edu.nuc.film.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.edu.nuc.film.common.PageControl;
import cn.edu.nuc.film.common.Pager;
import cn.edu.nuc.film.common.Parameter;
import cn.edu.nuc.film.common.UnitHelper;
import cn.edu.nuc.film.dao.FunctionMapper;
import cn.edu.nuc.film.dao.RoleMapper;
import cn.edu.nuc.film.dao.RoleRightMapper;
import cn.edu.nuc.film.entity.Function;
import cn.edu.nuc.film.entity.Role;
import cn.edu.nuc.film.entity.RoleRight;
import cn.edu.nuc.film.service.interfaces.RoleService;

@Service
public class RoleServiceImpl implements RoleService {
	
	@Autowired
	private RoleMapper roleMapper;
	@Autowired
	private FunctionMapper functionMapper;
	@Autowired
	private RoleRightMapper rrMapper;
	
	
	/**
	 * 主要获取角色名称列表。传到前台role列表
	 *//*
	public List<Role> role(){
		return roleMapper.role();
	}*/
	
	
	/**
	 * 新增角色
	 */
	public int insert(Role role) {
		
		int count = roleMapper.insert(role);
		
		return count;
	}
	
	/**
	 * 为添加和修改操作来获取role列表来服务
	 * @return
	 */
	public List<Role> roleList(){
		 
		List<Role> list =  roleMapper.roleList();
		return list;
		
	}
	
	
	/**
	 * 角色列表(分页)
	 */
	public Pager<Role> rolelist( PageControl pc,String name) {
		/**
		 * 设置dao层的参数列表( @Param("start") int start, @Param("offset") int
		 * offset,@Param("name") String name )
		 */
		Parameter para = new Parameter();
		para.setStart((pc.getCurrentindex() - 1) * pc.getPagesize());
		para.setOffset(pc.getPagesize());
		para.setName(name);
		// 获取每页的具体数据
		List<Role> list = roleMapper.rolelist(para);
		// 设置总记录数
		int pagecount = 0;
		if (name != null) {
			pagecount = list.size();
		} else {
			pagecount = roleMapper.count();
		}
		// 测试是否获得
		/*
		 * System.out.println("-----------------filmlist------------------");
		 * System.out.println(list);
		 */
		Pager<Role> pager = UnitHelper.execlist(pagecount, list, pc);
		return pager;
	}
	
	/**
	 * 获取role的详细信息，通过roleid进行查询
	 */
	public Role detail(int roleid) {
		Role role = roleMapper.selectByPrimaryKey(roleid);
		if( role != null ){
			return role;
		}else{
			throw new RuntimeException("获取role信息失败"); 
		}
	}
	
	
	/**
	 * 编辑角色
	 */
	public int updateRole(Role role) {
		int count = roleMapper.updateByPrimaryKeySelective(role);
		if( count > 0 ){
			return count;
		}else{
			throw new RuntimeException("编辑失败"); 
		}
		
	}
	
	/**
	 * 删除角色，通过roleid来紧进行操作
	 */
	public int deleteRole(int roleid) {
		int count = roleMapper.deleteByPrimaryKey(roleid);
		if( count > 0 ){
			return count;
		}else{
			throw new RuntimeException("删除失败"); 
		}
	}
	
	/**
	 * 获取角色的权限
	 */
	public List<Function> initfunction(Role role) {
		List<Function> list = functionMapper.initfunction(role);
		return list;
	}
	
	/**
	 * 删除角色现有权限，重新添加权限，以实现权限的更新操作
	 */
	public int deleteRight(int roleid) {
		int count = rrMapper.deleteByPrimaryKey(roleid);
		return count;
	}
	
	
	/**
	 * 添加权限 ，一个list的添加
	 */
	public int saveright(int roleid, String[] funids) {
		//声明、创建一个list对象
		List<RoleRight> list = new ArrayList<RoleRight>();
		//循环遍历，获取需要的roleRight对象，并添加到list里，实现list的添加
		for( int i=0;i<funids.length;i++){
			//声明、创建一个RoleRight对象
			RoleRight rr = new RoleRight();
			rr.setRoleid(roleid);
			rr.setFid(Integer.parseInt(funids[i]));
			//将role添加到list里
			list.add(rr);
		}
		System.out.println(list);
		int count = rrMapper.insertList(list);
		return count;
	}

}
